// modifyPluginJson.js
import { resolve } from "path";
import { readFileSync, writeFileSync } from "fs";

/**
 * 创建一个 Vite 插件，在构建过程中自动修改 plugin.json 文件
 * 该插件主要用于在生产环境构建时移除 plugin.json 中的 development 字段
 * 生产环境存在development配置会导致启动时页面空白
 * 构建完成后会自动恢复原始文件内容，确保开发环境不受影响
 * @returns {Object} Vite 插件对象
 */
const modifyPluginJson = () => {
  // 保存原始 plugin.json 文件内容，用于构建完成后恢复
  let originalPluginJson = null;
  // plugin.json 文件路径
  const pluginJsonPath = resolve(process.cwd(), "public/plugin.json");
  // 标记是否为构建模式
  let isBuild = false;

  return {
    name: "modify-plugin-json",

    /**
     * 配置解析钩子，判断是否为构建模式
     */
    configResolved(config) {
      isBuild = config.command === "build";
    },

    /**
     * 构建开始钩子，移除 development 字段
     */
    buildStart() {
      if (!isBuild) return;

      try {
        originalPluginJson = readFileSync(pluginJsonPath, "utf-8");
        const pluginJson = JSON.parse(originalPluginJson);

        delete pluginJson.development;

        writeFileSync(pluginJsonPath, JSON.stringify(pluginJson, null, 2));
      } catch (error) {
        console.error(`Failed to modify plugin.json: ${error.message}`);
      }
    },

    /**
     * 构建结束钩子，恢复原始 plugin.json 文件
     */
    closeBundle() {
      if (!isBuild || !originalPluginJson) return;

      try {
        writeFileSync(pluginJsonPath, originalPluginJson);
      } catch (error) {
        console.error(`Failed to restore plugin.json: ${error.message}`);
      }
    },
  };
};

export default modifyPluginJson;
